6080604052610d05600955610d05600a55600a600b55600b600c556001600d5566071afd498d0000600e556001600f60006101000a81548160ff0219169083151502179055506001600f60016101000a81548160ff02191690831515021790555060405180606001604052806036815260200162004aaa603691396010908051906020019062000091929190620007eb565b503480156200009f57600080fd5b506040518060400160405280600b81526020017f53706163652050657065730000000000000000000000000000000000000000008152506040518060400160405280600281526020017f53500000000000000000000000000000000000000000000000000000000000008152506200012c62000120620001af60201b60201c565b620001b760201b60201c565b816003908051906020019062000144929190620007eb565b5080600490805190602001906200015d929190620007eb565b506200016e6200027b60201b60201c565b6001819055505050620001893360646200028460201b60201c565b620001a960405180602001604052806000815250620002aa60201b60201c565b62000b6e565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006001905090565b620002a68282604051806020016040528060008152506200035560201b60201c565b5050565b620002ba620001af60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002e06200063960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000339576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200033090620008fc565b60405180910390fd5b806011908051906020019062000351929190620007eb565b5050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603620003c3576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008303620003fe576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200041360008583866200066260201b60201c565b600160406001901b178302600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e162000480600185146200066860201b60201c565b901b60a042901b62000498866200067260201b60201c565b1717600560008381526020019081526020016000208190555060008190506000848201905060008673ffffffffffffffffffffffffffffffffffffffff163b14620005a9575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46200055560008784806001019550876200067c60201b60201c565b6200058c576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808210620004de578260015414620005a357600080fd5b62000615565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210620005aa575b816001819055505050620006336000858386620007dd60201b60201c565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b50505050565b6000819050919050565b6000819050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620006aa620007e360201b60201c565b8786866040518563ffffffff1660e01b8152600401620006ce949392919062000a22565b6020604051808303816000875af19250505080156200070d57506040513d601f19601f820116820180604052508101906200070a919062000ad8565b60015b6200078a573d806000811462000740576040519150601f19603f3d011682016040523d82523d6000602084013e62000745565b606091505b50600081510362000782576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b50505050565b600033905090565b828054620007f99062000b39565b90600052602060002090601f0160209004810192826200081d576000855562000869565b82601f106200083857805160ff191683800117855562000869565b8280016001018555821562000869579182015b82811115620008685782518255916020019190600101906200084b565b5b5090506200087891906200087c565b5090565b5b80821115620008975760008160009055506001016200087d565b5090565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620008e46020836200089b565b9150620008f182620008ac565b602082019050919050565b600060208201905081810360008301526200091781620008d5565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200094b826200091e565b9050919050565b6200095d816200093e565b82525050565b6000819050919050565b620009788162000963565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620009ba5780820151818401526020810190506200099d565b83811115620009ca576000848401525b50505050565b6000601f19601f8301169050919050565b6000620009ee826200097e565b620009fa818562000989565b935062000a0c8185602086016200099a565b62000a1781620009d0565b840191505092915050565b600060808201905062000a39600083018762000952565b62000a48602083018662000952565b62000a5760408301856200096d565b818103606083015262000a6b8184620009e1565b905095945050505050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62000ab28162000a7b565b811462000abe57600080fd5b50565b60008151905062000ad28162000aa7565b92915050565b60006020828403121562000af15762000af062000a76565b5b600062000b018482850162000ac1565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b5257607f821691505b60208210810362000b685762000b6762000b0a565b5b50919050565b613f2c8062000b7e6000396000f3fe60806040526004361061025c5760003560e01c80637c928fe911610144578063bbb64319116100b6578063d5abeb011161007a578063d5abeb0114610890578063e0a80853146108bb578063e985e9c5146108e4578063eb8d244414610921578063f2fde38b1461094c578063fbbf8cc3146109755761025c565b8063bbb64319146107ab578063c6682862146107d4578063c6f6f216146107ff578063c87b56dd14610828578063d3464cbd146108655761025c565b806396b102011161010857806396b10201146106aa578063a035b1fe146106e7578063a0712d6814610712578063a22cb4651461072e578063a45ba8e714610757578063b88d4fde146107825761025c565b80637c928fe9146105d75780638bc35c2f146106005780638da5cb5b1461062b57806391b7f5ed1461065657806395d89b411461067f5761025c565b80634fdd43cb116101dd5780636c0360eb116101a15780636c0360eb146104ef5780636f8b44b01461051a57806370a0823114610543578063715018a6146105805780637ba5e621146105975780637bddd65b146105ae5761025c565b80634fdd43cb1461042b578063518302271461045457806355f804b31461047f5780635fd8c710146104a85780636352211e146104b25761025c565b806318160ddd1161022457806318160ddd1461035857806323b872dd146103835780632e0fd6eb146103ac57806342842e0e146103d757806347513334146104005761025c565b806301ffc9a71461026157806306fdde031461029e578063081812fc146102c9578063095ea7b3146103065780631141df201461032f575b600080fd5b34801561026d57600080fd5b5061028860048036038101906102839190612e61565b6109b2565b6040516102959190612ea9565b60405180910390f35b3480156102aa57600080fd5b506102b3610a44565b6040516102c09190612f5d565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb9190612fb5565b610ad6565b6040516102fd9190613023565b60405180910390f35b34801561031257600080fd5b5061032d6004803603810190610328919061306a565b610b52565b005b34801561033b57600080fd5b5061035660048036038101906103519190612fb5565b610cf8565b005b34801561036457600080fd5b5061036d610de7565b60405161037a91906130b9565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a591906130d4565b610dfe565b005b3480156103b857600080fd5b506103c1610e0e565b6040516103ce91906130b9565b60405180910390f35b3480156103e357600080fd5b506103fe60048036038101906103f991906130d4565b610e14565b005b34801561040c57600080fd5b50610415610e34565b60405161042291906130b9565b60405180910390f35b34801561043757600080fd5b50610452600480360381019061044d919061325c565b610e3a565b005b34801561046057600080fd5b50610469610ed0565b6040516104769190612ea9565b60405180910390f35b34801561048b57600080fd5b506104a660048036038101906104a1919061325c565b610ee3565b005b6104b0610f79565b005b3480156104be57600080fd5b506104d960048036038101906104d49190612fb5565b6110b8565b6040516104e69190613023565b60405180910390f35b3480156104fb57600080fd5b506105046110ca565b6040516105119190612f5d565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c9190612fb5565b611158565b005b34801561054f57600080fd5b5061056a600480360381019061056591906132a5565b6111de565b60405161057791906130b9565b60405180910390f35b34801561058c57600080fd5b50610595611296565b005b3480156105a357600080fd5b506105ac61131e565b005b3480156105ba57600080fd5b506105d560048036038101906105d09190612fb5565b6113c6565b005b3480156105e357600080fd5b506105fe60048036038101906105f99190612fb5565b61144c565b005b34801561060c57600080fd5b50610615611651565b60405161062291906130b9565b60405180910390f35b34801561063757600080fd5b50610640611657565b60405161064d9190613023565b60405180910390f35b34801561066257600080fd5b5061067d60048036038101906106789190612fb5565b611680565b005b34801561068b57600080fd5b50610694611706565b6040516106a19190612f5d565b60405180910390f35b3480156106b657600080fd5b506106d160048036038101906106cc91906132a5565b611798565b6040516106de91906130b9565b60405180910390f35b3480156106f357600080fd5b506106fc6117b0565b60405161070991906130b9565b60405180910390f35b61072c60048036038101906107279190612fb5565b6117b6565b005b34801561073a57600080fd5b50610755600480360381019061075091906132fe565b611a5c565b005b34801561076357600080fd5b5061076c611bd3565b6040516107799190612f5d565b60405180910390f35b34801561078e57600080fd5b506107a960048036038101906107a491906133df565b611c61565b005b3480156107b757600080fd5b506107d260048036038101906107cd9190612fb5565b611cd4565b005b3480156107e057600080fd5b506107e9611d5a565b6040516107f69190612f5d565b60405180910390f35b34801561080b57600080fd5b5061082660048036038101906108219190612fb5565b611d93565b005b34801561083457600080fd5b5061084f600480360381019061084a9190612fb5565b611e19565b60405161085c9190612f5d565b60405180910390f35b34801561087157600080fd5b5061087a611fa6565b60405161088791906130b9565b60405180910390f35b34801561089c57600080fd5b506108a5611fac565b6040516108b291906130b9565b60405180910390f35b3480156108c757600080fd5b506108e260048036038101906108dd9190613462565b611fb2565b005b3480156108f057600080fd5b5061090b6004803603810190610906919061348f565b61204b565b6040516109189190612ea9565b60405180910390f35b34801561092d57600080fd5b506109366120df565b6040516109439190612ea9565b60405180910390f35b34801561095857600080fd5b50610973600480360381019061096e91906132a5565b6120f2565b005b34801561098157600080fd5b5061099c600480360381019061099791906132a5565b6121e9565b6040516109a991906130b9565b60405180910390f35b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a0d57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a3d5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060038054610a53906134fe565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7f906134fe565b8015610acc5780601f10610aa157610100808354040283529160200191610acc565b820191906000526020600020905b815481529060010190602001808311610aaf57829003601f168201915b5050505050905090565b6000610ae182612201565b610b17576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b5d82612260565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610bc4576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610be361232c565b73ffffffffffffffffffffffffffffffffffffffff1614610c4657610c0f81610c0a61232c565b61204b565b610c45576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610d00612334565b73ffffffffffffffffffffffffffffffffffffffff16610d1e611657565b73ffffffffffffffffffffffffffffffffffffffff1614610d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6b9061357b565b60405180910390fd5b610d7c610de7565b81600954610d8a91906135ca565b1015610dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc290613670565b60405180910390fd5b8060096000828254610ddd91906135ca565b9250508190555050565b6000610df161233c565b6002546001540303905090565b610e09838383612345565b505050565b600d5481565b610e2f83838360405180602001604052806000815250611c61565b505050565b600a5481565b610e42612334565b73ffffffffffffffffffffffffffffffffffffffff16610e60611657565b73ffffffffffffffffffffffffffffffffffffffff1614610eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ead9061357b565b60405180910390fd5b8060119080519060200190610ecc929190612d52565b5050565b600f60019054906101000a900460ff1681565b610eeb612334565b73ffffffffffffffffffffffffffffffffffffffff16610f09611657565b73ffffffffffffffffffffffffffffffffffffffff1614610f5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f569061357b565b60405180910390fd5b8060109080519060200190610f75929190612d52565b5050565b610f81612334565b73ffffffffffffffffffffffffffffffffffffffff16610f9f611657565b73ffffffffffffffffffffffffffffffffffffffff1614610ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fec9061357b565b60405180910390fd5b60007316d948cd51eadeaae061f0f28bd177d19ec6ccbc73ffffffffffffffffffffffffffffffffffffffff164760405161102f906136c1565b60006040518083038185875af1925050503d806000811461106c576040519150601f19603f3d011682016040523d82523d6000602084013e611071565b606091505b50509050806110b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ac90613722565b60405180910390fd5b50565b60006110c382612260565b9050919050565b601080546110d7906134fe565b80601f0160208091040260200160405190810160405280929190818152602001828054611103906134fe565b80156111505780601f1061112557610100808354040283529160200191611150565b820191906000526020600020905b81548152906001019060200180831161113357829003601f168201915b505050505081565b611160612334565b73ffffffffffffffffffffffffffffffffffffffff1661117e611657565b73ffffffffffffffffffffffffffffffffffffffff16146111d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cb9061357b565b60405180910390fd5b8060098190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611245576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b61129e612334565b73ffffffffffffffffffffffffffffffffffffffff166112bc611657565b73ffffffffffffffffffffffffffffffffffffffff1614611312576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113099061357b565b60405180910390fd5b61131c60006126ec565b565b611326612334565b73ffffffffffffffffffffffffffffffffffffffff16611344611657565b73ffffffffffffffffffffffffffffffffffffffff161461139a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113919061357b565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b6113ce612334565b73ffffffffffffffffffffffffffffffffffffffff166113ec611657565b73ffffffffffffffffffffffffffffffffffffffff1614611442576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114399061357b565b60405180910390fd5b80600c8190555050565b600f60009054906101000a900460ff1661149b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114929061378e565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611509576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611500906137fa565b60405180910390fd5b80611512610de7565b61151c919061381a565b600a541015611560576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611557906138bc565b60405180910390fd5b6000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600d5482826115b3919061381a565b11156115f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115eb9061394e565b60405180910390fd5b8181611600919061381a565b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061164d33836127b0565b5050565b600c5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611688612334565b73ffffffffffffffffffffffffffffffffffffffff166116a6611657565b73ffffffffffffffffffffffffffffffffffffffff16146116fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f39061357b565b60405180910390fd5b80600e8190555050565b606060048054611715906134fe565b80601f0160208091040260200160405190810160405280929190818152602001828054611741906134fe565b801561178e5780601f106117635761010080835404028352916020019161178e565b820191906000526020600020905b81548152906001019060200180831161177157829003601f168201915b5050505050905090565b60126020528060005260406000206000915090505481565b600e5481565b600f60009054906101000a900460ff16611805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fc9061378e565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186a906137fa565b60405180910390fd5b80600e54611881919061396e565b3410156118c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ba90613a14565b60405180910390fd5b806118cc610de7565b6118d6919061381a565b600954101561191a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611911906138bc565b60405180910390fd5b6000601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600c54828261196d919061381a565b11156119ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a590613a80565b60405180910390fd5b6000821180156119c05750600b548211155b6119ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f690613aec565b60405180910390fd5b8181611a0b919061381a565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a5833836127b0565b5050565b611a6461232c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ac8576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060086000611ad561232c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b8261232c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bc79190612ea9565b60405180910390a35050565b60118054611be0906134fe565b80601f0160208091040260200160405190810160405280929190818152602001828054611c0c906134fe565b8015611c595780601f10611c2e57610100808354040283529160200191611c59565b820191906000526020600020905b815481529060010190602001808311611c3c57829003601f168201915b505050505081565b611c6c848484612345565b60008373ffffffffffffffffffffffffffffffffffffffff163b14611cce57611c97848484846127ce565b611ccd576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b611cdc612334565b73ffffffffffffffffffffffffffffffffffffffff16611cfa611657565b73ffffffffffffffffffffffffffffffffffffffff1614611d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d479061357b565b60405180910390fd5b80600d8190555050565b6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525081565b611d9b612334565b73ffffffffffffffffffffffffffffffffffffffff16611db9611657565b73ffffffffffffffffffffffffffffffffffffffff1614611e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e069061357b565b60405180910390fd5b80600b8190555050565b6060611e2482612201565b611e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5a90613b58565b60405180910390fd5b60001515600f60019054906101000a900460ff16151503611f105760118054611e8b906134fe565b80601f0160208091040260200160405190810160405280929190818152602001828054611eb7906134fe565b8015611f045780601f10611ed957610100808354040283529160200191611f04565b820191906000526020600020905b815481529060010190602001808311611ee757829003601f168201915b50505050509050611fa1565b600060108054611f1f906134fe565b905011611f3b5760405180602001604052806000815250611f9e565b6010611f468361291e565b6040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250604051602001611f8e93929190613c48565b6040516020818303038152906040525b90505b919050565b600b5481565b60095481565b611fba612334565b73ffffffffffffffffffffffffffffffffffffffff16611fd8611657565b73ffffffffffffffffffffffffffffffffffffffff161461202e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120259061357b565b60405180910390fd5b80600f60016101000a81548160ff02191690831515021790555050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600f60009054906101000a900460ff1681565b6120fa612334565b73ffffffffffffffffffffffffffffffffffffffff16612118611657565b73ffffffffffffffffffffffffffffffffffffffff161461216e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121659061357b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d490613ceb565b60405180910390fd5b6121e6816126ec565b50565b60136020528060005260406000206000915090505481565b60008161220c61233c565b1115801561221b575060015482105b8015612259575060007c0100000000000000000000000000000000000000000000000000000000600560008581526020019081526020016000205416145b9050919050565b6000808290508061226f61233c565b116122f5576001548110156122f45760006005600083815260200190815260200160002054905060007c01000000000000000000000000000000000000000000000000000000008216036122f2575b600081036122e85760056000836001900393508381526020019081526020016000205490506122be565b8092505050612327565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600033905090565b600033905090565b60006001905090565b600061235082612260565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146123b7576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166123d861232c565b73ffffffffffffffffffffffffffffffffffffffff16148061240757506124068561240161232c565b61204b565b5b8061244c575061241561232c565b73ffffffffffffffffffffffffffffffffffffffff1661243484610ad6565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612485576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036124eb576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124f88585856001612a7e565b6007600084815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b6125f586612a84565b1717600560008581526020019081526020016000208190555060007c020000000000000000000000000000000000000000000000000000000083160361267d576000600184019050600060056000838152602001908152602001600020540361267b57600154811461267a578260056000838152602001908152602001600020819055505b5b505b828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46126e58585856001612a8e565b5050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6127ca828260405180602001604052806000815250612a94565b5050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127f461232c565b8786866040518563ffffffff1660e01b81526004016128169493929190613d60565b6020604051808303816000875af192505050801561285257506040513d601f19601f8201168201806040525081019061284f9190613dc1565b60015b6128cb573d8060008114612882576040519150601f19603f3d011682016040523d82523d6000602084013e612887565b606091505b5060008151036128c3576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060008203612965576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a79565b600082905060005b6000821461299757808061298090613dee565b915050600a826129909190613e65565b915061296d565b60008167ffffffffffffffff8111156129b3576129b2613131565b5b6040519080825280601f01601f1916602001820160405280156129e55781602001600182028036833780820191505090505b5090505b60008514612a72576001826129fe91906135ca565b9150600a85612a0d9190613e96565b6030612a19919061381a565b60f81b818381518110612a2f57612a2e613ec7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a6b9190613e65565b94506129e9565b8093505050505b919050565b50505050565b6000819050919050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612b01576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008303612b3b576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b486000858386612a7e565b600160406001901b178302600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e1612bad60018514612d48565b901b60a042901b612bbd86612a84565b1717600560008381526020019081526020016000208190555060008190506000848201905060008673ffffffffffffffffffffffffffffffffffffffff163b14612cc1575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c7160008784806001019550876127ce565b612ca7576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808210612c02578260015414612cbc57600080fd5b612d2c565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210612cc2575b816001819055505050612d426000858386612a8e565b50505050565b6000819050919050565b828054612d5e906134fe565b90600052602060002090601f016020900481019282612d805760008555612dc7565b82601f10612d9957805160ff1916838001178555612dc7565b82800160010185558215612dc7579182015b82811115612dc6578251825591602001919060010190612dab565b5b509050612dd49190612dd8565b5090565b5b80821115612df1576000816000905550600101612dd9565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612e3e81612e09565b8114612e4957600080fd5b50565b600081359050612e5b81612e35565b92915050565b600060208284031215612e7757612e76612dff565b5b6000612e8584828501612e4c565b91505092915050565b60008115159050919050565b612ea381612e8e565b82525050565b6000602082019050612ebe6000830184612e9a565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612efe578082015181840152602081019050612ee3565b83811115612f0d576000848401525b50505050565b6000601f19601f8301169050919050565b6000612f2f82612ec4565b612f398185612ecf565b9350612f49818560208601612ee0565b612f5281612f13565b840191505092915050565b60006020820190508181036000830152612f778184612f24565b905092915050565b6000819050919050565b612f9281612f7f565b8114612f9d57600080fd5b50565b600081359050612faf81612f89565b92915050565b600060208284031215612fcb57612fca612dff565b5b6000612fd984828501612fa0565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061300d82612fe2565b9050919050565b61301d81613002565b82525050565b60006020820190506130386000830184613014565b92915050565b61304781613002565b811461305257600080fd5b50565b6000813590506130648161303e565b92915050565b6000806040838503121561308157613080612dff565b5b600061308f85828601613055565b92505060206130a085828601612fa0565b9150509250929050565b6130b381612f7f565b82525050565b60006020820190506130ce60008301846130aa565b92915050565b6000806000606084860312156130ed576130ec612dff565b5b60006130fb86828701613055565b935050602061310c86828701613055565b925050604061311d86828701612fa0565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61316982612f13565b810181811067ffffffffffffffff8211171561318857613187613131565b5b80604052505050565b600061319b612df5565b90506131a78282613160565b919050565b600067ffffffffffffffff8211156131c7576131c6613131565b5b6131d082612f13565b9050602081019050919050565b82818337600083830152505050565b60006131ff6131fa846131ac565b613191565b90508281526020810184848401111561321b5761321a61312c565b5b6132268482856131dd565b509392505050565b600082601f83011261324357613242613127565b5b81356132538482602086016131ec565b91505092915050565b60006020828403121561327257613271612dff565b5b600082013567ffffffffffffffff8111156132905761328f612e04565b5b61329c8482850161322e565b91505092915050565b6000602082840312156132bb576132ba612dff565b5b60006132c984828501613055565b91505092915050565b6132db81612e8e565b81146132e657600080fd5b50565b6000813590506132f8816132d2565b92915050565b6000806040838503121561331557613314612dff565b5b600061332385828601613055565b9250506020613334858286016132e9565b9150509250929050565b600067ffffffffffffffff82111561335957613358613131565b5b61336282612f13565b9050602081019050919050565b600061338261337d8461333e565b613191565b90508281526020810184848401111561339e5761339d61312c565b5b6133a98482856131dd565b509392505050565b600082601f8301126133c6576133c5613127565b5b81356133d684826020860161336f565b91505092915050565b600080600080608085870312156133f9576133f8612dff565b5b600061340787828801613055565b945050602061341887828801613055565b935050604061342987828801612fa0565b925050606085013567ffffffffffffffff81111561344a57613449612e04565b5b613456878288016133b1565b91505092959194509250565b60006020828403121561347857613477612dff565b5b6000613486848285016132e9565b91505092915050565b600080604083850312156134a6576134a5612dff565b5b60006134b485828601613055565b92505060206134c585828601613055565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061351657607f821691505b602082108103613529576135286134cf565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613565602083612ecf565b91506135708261352f565b602082019050919050565b6000602082019050818103600083015261359481613558565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006135d582612f7f565b91506135e083612f7f565b9250828210156135f3576135f261359b565b5b828203905092915050565b7f537570706c792063616e6e6f742066616c6c2062656c6f77206d696e7465642060008201527f746f6b656e732e00000000000000000000000000000000000000000000000000602082015250565b600061365a602783612ecf565b9150613665826135fe565b604082019050919050565b600060208201905081810360008301526136898161364d565b9050919050565b600081905092915050565b50565b60006136ab600083613690565b91506136b68261369b565b600082019050919050565b60006136cc8261369e565b9150819050919050565b7f7472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b600061370c601083612ecf565b9150613717826136d6565b602082019050919050565b6000602082019050818103600083015261373b816136ff565b9050919050565b7f53616c65206973206e6f7420616374697665207965742e000000000000000000600082015250565b6000613778601783612ecf565b915061378382613742565b602082019050919050565b600060208201905081810360008301526137a78161376b565b9050919050565b7f57726f6e672043616c6c65720000000000000000000000000000000000000000600082015250565b60006137e4600c83612ecf565b91506137ef826137ae565b602082019050919050565b60006020820190508181036000830152613813816137d7565b9050919050565b600061382582612f7f565b915061383083612f7f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156138655761386461359b565b5b828201905092915050565b7f45786365656473206d617820737570706c792e00000000000000000000000000600082015250565b60006138a6601383612ecf565b91506138b182613870565b602082019050919050565b600060208201905081810360008301526138d581613899565b9050919050565b7f45786365656473206d61782066726565206d696e74732070657220616464726560008201527f7373210000000000000000000000000000000000000000000000000000000000602082015250565b6000613938602383612ecf565b9150613943826138dc565b604082019050919050565b600060208201905081810360008301526139678161392b565b9050919050565b600061397982612f7f565b915061398483612f7f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156139bd576139bc61359b565b5b828202905092915050565b7f496e73756666696369656e742046756e64730000000000000000000000000000600082015250565b60006139fe601283612ecf565b9150613a09826139c8565b602082019050919050565b60006020820190508181036000830152613a2d816139f1565b9050919050565b7f45786365656473206d6178206d696e7473207065722061646472657373210000600082015250565b6000613a6a601e83612ecf565b9150613a7582613a34565b602082019050919050565b60006020820190508181036000830152613a9981613a5d565b9050919050565b7f496e76616c6964206d696e7420616d6f756e742e000000000000000000000000600082015250565b6000613ad6601483612ecf565b9150613ae182613aa0565b602082019050919050565b60006020820190508181036000830152613b0581613ac9565b9050919050565b7f546f6b656e20646f6573206e6f742065786973742e0000000000000000000000600082015250565b6000613b42601583612ecf565b9150613b4d82613b0c565b602082019050919050565b60006020820190508181036000830152613b7181613b35565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154613ba5816134fe565b613baf8186613b78565b94506001821660008114613bca5760018114613bdb57613c0e565b60ff19831686528186019350613c0e565b613be485613b83565b60005b83811015613c0657815481890152600182019150602081019050613be7565b838801955050505b50505092915050565b6000613c2282612ec4565b613c2c8185613b78565b9350613c3c818560208601612ee0565b80840191505092915050565b6000613c548286613b98565b9150613c608285613c17565b9150613c6c8284613c17565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613cd5602683612ecf565b9150613ce082613c79565b604082019050919050565b60006020820190508181036000830152613d0481613cc8565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613d3282613d0b565b613d3c8185613d16565b9350613d4c818560208601612ee0565b613d5581612f13565b840191505092915050565b6000608082019050613d756000830187613014565b613d826020830186613014565b613d8f60408301856130aa565b8181036060830152613da18184613d27565b905095945050505050565b600081519050613dbb81612e35565b92915050565b600060208284031215613dd757613dd6612dff565b5b6000613de584828501613dac565b91505092915050565b6000613df982612f7f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613e2b57613e2a61359b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e7082612f7f565b9150613e7b83612f7f565b925082613e8b57613e8a613e36565b5b828204905092915050565b6000613ea182612f7f565b9150613eac83612f7f565b925082613ebc57613ebb613e36565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea26469706673582212200d4f0dc690b967f095f043a677cbcaa7a6688d384e0a1e704bdae6544780631764736f6c634300080d0033697066733a2f2f516d54614a6d3261674476336d51705343317737693266734b58384246684e626e376d38434745463731336d68532f